import { http } from '@/utils/http'

// 收货相关
const AUTH_BASE_URL_RECEIVE = '/core/PDAReceive'
// 采购相关
const AUTH_BASE_URL_PURCHASE = '/core/tPurchaseOrder'
// 称重相关
const AUTH_BASE_URL_WEIGHING = '/core/smartScale'

// 秤code
export enum ScaleCode {
  SCALE_1 = '17388294738927398512',
  SCALE_2 = '17389274110795716132',
}

const goodsReceiptApi = {
  // 根据框码获取当前存储信息
  getBasketRecordByCode: (code: string) => {
    return http<GoodsReceiptData[]>({
      url: `${AUTH_BASE_URL_RECEIVE}/getBasketRecordByCode?code=${code}`,
      method: 'GET',
    })
  },
  // 绑定框码
  bindBasket: (data: BindBasketData) => {
    return http<any>({
      url: `${AUTH_BASE_URL_RECEIVE}/bindBasket`,
      method: 'POST',
      data,
    })
  },
  // 拒绝采购单
  refusePurchaseOrder: (orderCode: string) => {
    return http<any>({
      url: `${AUTH_BASE_URL_RECEIVE}/refusePurchaseOrder`,
      method: 'POST',
      data: {
        orderCode,
      },
    })
  },
  // 保存采购收货
  savePurchaseReceive: (data: SavePurchaseReceiveData) => {
    return http<any>({
      url: `${AUTH_BASE_URL_RECEIVE}/savePurchaseReceive`,
      method: 'POST',
      data,
    })
  },
  // 获取采购单列表
  getPurchaseOrderList: (query: PurchaseOrderListQuery) => {
    const queryString = encodeURIComponent(JSON.stringify(query))
    return http<PurchaseOrderListData[]>({
      url: `${AUTH_BASE_URL_PURCHASE}/getTPurchaseOrderList?object=${queryString}`,
      method: 'GET',
    })
  },
  // 获取采购单详情
  getPurchaseOrderDetail: (parentCode: string) => {
    return http<PurchaseOrderDetailData[]>({
      url: `${AUTH_BASE_URL_PURCHASE}/getTPurchaseOrderDetailByCode?parentCode=${parentCode}`,
      method: 'GET',
    })
  },
  // 获取称重信息
  getScaleInfo: (code: ScaleCode, sourceCode: string, productCode: string) => {
    return http<ScaleInfoData>({
      url: `${AUTH_BASE_URL_WEIGHING}/getScaleInfo?code=${code}&sourceCode=${sourceCode}&productCode=${productCode}`,
      method: 'GET',
    })
  },
  // 获取出/入库单下的待入库框建议储位
  getTempInStockDetail: (tranCode: string) => {
    return http<TempInStockDetailData[]>({
      url: `${AUTH_BASE_URL_RECEIVE}/getRecBasketsByTranCode?code=${tranCode}`,
      method: 'GET',
    })
  },
  // 查询系统内筐码
  getBasketByCode: (code: string) => {
    return http({
      url: `${AUTH_BASE_URL_RECEIVE}/getBasketByCode?code=${code}`,
      method: 'GET',
    })
  },
  // 查询框下其他分组信息
  getBatchBasketByCode: (code: string) => {
    return http<TempInStockDetailData[]>({
      url: `${AUTH_BASE_URL_RECEIVE}/getBatchBasketByCode?code=${code}`,
      method: 'GET',
    })
  },
}
export default goodsReceiptApi

/** 采购单分页查询 */
export interface PurchaseOrderListQuery extends QueryParams {
  statusList: number[]
  code?: string
}
/** 采购单列表 */
export interface PurchaseOrderListData {
  approvalName: string // 审批人名称
  approvalRemark: string // 审批备注
  approvalTime: string // 审批时间
  approvalUser: number // 审批人ID
  code: string // 采购单号
  companyCode: string // 公司代码
  companyName: string // 公司名称
  createName: string // 创建者名称
  createTime: string // 创建时间
  createUser: number // 创建者ID
  currency: string // 货币
  deliveryDate: string // 交货日期
  discountAmount: number // 折扣金额
  discountRate: number // 折扣率
  docType: string // 文档类型
  dueDate: string // 到期日
  genNo: number // 生成编号
  id: number // 采购单ID
  isDelete: number // 是否删除
  issueDate: string // 发布日期
  modifyName: string // 修改者名称
  modifyTime: string // 修改时间
  modifyUser: number // 修改者ID
  orderAmount: number // 订单金额
  otherRef: string // 其他参考
  packing: string // 包装
  pageNum: number // 页码
  pageSize: number // 每页大小
  parentCode: string // 父级代码
  paymentTerm: string // 支付条款
  prefix: string // 前缀
  //   purchaseOrderDetailList: PurchaseOrderDetailData[] // 采购单详情列表
  rate: number // 汇率
  refCode: string // 参考代码
  remark: string // 备注
  salesMan: string // 销售员
  shipCode: string // 船运代码
  shippingMark: string // 运输标记
  shippingSideMark: string // 运输侧面标记
  shippingTerm: string // 运输条款
  status: number // 状态
  statusList: number[] // 状态列表
  timeScopes: string[] // 时间范围
  totalAmount: number // 总金额
  totalQty: number // 总数量
  tradeTerm: string // 贸易条款
  unitPrice: number // 单价
}

/** 采购单详情 */
export interface PurchaseOrderDetailData {
  amount: number // 金额
  code: string // 代码
  createDate: string // 创建日期
  createName: string // 创建者名称
  createUser: string // 创建者ID
  customerSku: string // 客户SKU
  description: string // 描述
  discountAmount: number // 折扣金额
  discountRate: number // 折扣率
  id: number // 采购单详情ID
  isDelete: number // 是否删除
  itemAmount: number // 项目金额
  parentCode: string // 父级代码
  productCode: string // 产品代码
  productName: string // 产品名称
  qty: number // 数量
  receiveTotal: number // 实际重量
  rowRemark: string // 行备注
  rowSeq: number // 行序号
  sortSeq: number // 排序序号
  sourceCode: string // 来源代码
  status: number // 状态
  unit: string // 单位
  unitPrice: number // 单价
}

/** 根据框码获取当前存储信息 */
export interface GoodsReceiptData {
  code: string // 唯一代码，可能是产品的唯一标识符
  companyCode: string // 公司代码，表示产品所属公司的标识
  createName: string // 创建者名称，记录创建此产品信息的用户名称
  createTime: string // 创建时间，记录产品信息的创建时间
  createUser: number // 创建用户ID，记录创建此产品信息的用户ID
  id: number // 产品ID，唯一标识一个产品
  isDelete: boolean // 是否删除，表示产品信息是否被逻辑删除
  parentCode: string // 父级代码，可能用于表示产品的分类或层级关系
  productCode: string // 产品代码，可能是产品的内部编码
  productName: string // 产品名称，产品的名称
  qty: number // 数量，表示产品的数量
  sourceCategory: number // 来源类别，可能用于区分产品的来源类型
  sourceCode: string // 来源代码，可能用于进一步细化产品的来源
}
/** 绑定框码 */
export interface BindBasketData {
  parentCode: string // 框码
  productCode: string // 产品代码
  // productName: string // 产品名称
  qty: number // 数量
  sourceCategory: number // 来源类型(1=采购单)
  sourceCode: string // 批次号
}

/** 保存采购收货 */
export interface SavePurchaseReceiveData {
  orderCode: string // 采购订单编号
  parentCode: string // 采购单明细编号
  processQty?: number // 粗加工数量
  productCode: string // 产品代码
  productName: string // 产品名称
  qty: number // 数量
  qualifiedQty: number // 合格数量
  receiveQty: number // 实际重量
  physicalImage: string[] // 实物图片 ["url1", "url2"]
  reportImage: string[] // 报告图片 ["url1", "url2"]
}
/** 称重信息 */
export interface ScaleInfoData {
  code: string // 智能秤唯一编码
  createTime: string // 创建时间
  productCode: string // 产品代码
  productName: string // 产品名称
  sourceCode: string // 来源代码
  weight: number // 重量
}
/** 称重记录 */
export interface WeightRecord {
  code: string // 智能秤唯一编码
  sourceCode: string // 来源代码
  productName: string // 产品名称
  productCode: string // 产品代码
  weight: number // 重量
  createTime: string // 创建时间
}

/** 出/入库单下的待入库框建议储位 */
export interface TempInStockDetailData {
  batchNo: string
  code: string
  companyCode: string
  createName: string
  createTime: string
  createUser: number
  id: number
  isDelete: number
  parentCode: string
  productCode: string
  productName: string
  qty: number
  recInCode: string
  recInLocation: string
  recInTime: string
  recOutCode: string
  recOutLocation: string
  recOutTime: string
  sourceCategory: number
  sourceCode: string
  status: number
}
